<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class CategoriaModel extends CI_Model {

    function __construct(){
        parent::__construct();
    }
    /**
     * Função que retorna as categorias do nível desejado, ou as pais se nada passado
     *
     * @param int $nivel
     * @return row de categorias
     */
    function inserir($dados){
        $this->db->insert("categoria", $dados);
        return $this->db->insert_id();

    }

    public function listar(){
//        $query = $this->db->get("categoria");
        return $query;
    }


    function getCategoriaNivel($nivel = 0){
        $this->db->where("nivel",$nivel);
        $this->db->from("categoria");
        return $this->db->get();
    }
    /**
     *Retorna a categoria do id passado
     *
     * @param int $idCategoria
     * @return object ou false
     */
    function getCategoria($idCategoria){
        $this->db->where("idCategoria",$idCategoria);
        $this->db->from("categoria");
        $query = $this->db->get();
        if( $query->num_rows() > 0 ) :
            return $query->row(0);
        else :
            return false;
        endif;
    }
    
    function getCategoriaNome($nome){
        $this->db->where("nome",$nome);
        $this->db->from("categoria");
        $query = $this->db->get();
        if( $query->num_rows() > 0 ) :
            return $query->row(0);
        else :
            return false;
        endif;
    }

    /**
     * Retorna o pai da Categoria Id
     *
     * @param <type> $idCategoria
     * @return object ou false
     */
    function getCategoriaPai($idCategoria){
        $categoria = $this->getCategoria($idCategoria);
        if($categoria != false){
            if($categoria->idCategoriaPai != "" || $categoria->idCategoriaPai != null):
                $this->db->where("idCategoria", $categoria->idCategoriaPai);
                $this->db->from("categoria");
                return $this->db->get()->row(0);
             else :
                 return false;
             endif;
        }
        else
            return false;
    }


    /**
     * Função que retorna o pai, pai do pai, e assim por diante da categoria do id passado
     *
     * @param $idCategoria
     * @return array
     */
    function getCategoriaPais($idCategoria){
        $categoria = $this->getCategoria($idCategoria);
        $pais = array();
        if($categoria != false){
            while($categoria->idCategoriaPai != "" && $categoria->idCategoriaPai != null){
                $this->db->where("idCategoria", $categoria->idCategoriaPai);
                $this->db->from("categoria");
                $categoriaPai = $this->db->get()->row(0);
                array_push($pais, $categoriaPai);
                $categoria = $categoriaPai;
            }
        }
        if ($pais == null) return false;
        else return $pais;
    }
    function getCategoriaLastPai($idCategoria){
        $categoria = $this->getCategoria($idCategoria);
        $pais= "";
        if($categoria != false){
            if($categoria->nivel == 0)
                return $categoria;
            else{
                while($categoria->nivel > 0){
                    $this->db->where("idCategoria", $categoria->idCategoriaPai);
                    $this->db->from("categoria");
                    $categoriaPai = $this->db->get()->row(0);
                    $categoria = $categoriaPai;
                }
                return $categoria;
            }
        }
    }

    /**
     * Função que retorna o atual, pai, pai do pai, e assim por diante da categoria do id passado
     *
     * @param $idCategoria
     * @return array
     */
    function getCategoriaAtualPais($idCategoria){
        $categoria = $this->getCategoria($idCategoria);
        if($categoria != false){
            $pais = array();
            array_push($pais,$categoria);
            while($categoria->idCategoriaPai != null){
                $this->db->where("idCategoria", $categoria->idCategoriaPai);
                $this->db->from("categoria");
                $categoriaPai = $this->db->get()->row(0);
                array_push($pais, $categoriaPai);
                $categoria = $categoriaPai;
            }
            return $pais;
        }
        else return false;
    }
    
    /**
     * Retorna uma row de Categorias filhas da categoria passada ou false se não
     * existir nenhuma filha 
     * 
     * @param int $idCategoria
     * @return row ou false
     */

    function getCategoriaFilhos($idCategoria){
        $this->db->where("idCategoriaPai",$idCategoria);
        $this->db->from("categoria");
        $query = $this->db->get();
        if ($query->num_rows() > 0):
            return $query;
        else :
            return false;
        endif;
    }

    public function buscar($str){
        $this->db->from("categoria");
        $this->db->like("nome", $str);
        $query = $this->db->get();
        if($query->num_rows() > 0 )
            return $query;
        else
            return false;
    }

    function update($id, $dados){
        $this->db->where("idCategoria", $id);
        $this->db->update("categoria", $dados);
    }

    function delete($id){
        $this->db->where("idCategoria", $id);
        $this->db->delete("categoria");
    }
}
?>
